package com.yx.changdao.web.controller;

import com.yx.changdao.common.annotation.AutoLog;
import com.yx.changdao.common.annotation.ShiroDesc;
import com.yx.changdao.common.data.Result;
import com.yx.changdao.common.entity.SysUserRole;
import com.yx.changdao.common.exception.AlertException;
import com.yx.changdao.service.SysUserRoleService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.hibernate.validator.constraints.Length;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * @Description: <br />
 * 用户角色接口
 * <p>
 * <br />
 * @Auther: Zhangjiashun
 * @create 2019/11/18 13:34
 */
@RestController
@RequestMapping(value = "/sys/user/role", produces = {"application/json;charset=UTF-8"})
public class SysUserRoleController {
    private final SysUserRoleService sysUserRoleService;

    public SysUserRoleController(SysUserRoleService sysUserRoleService) {
        this.sysUserRoleService = sysUserRoleService;
    }

//    /**
//     * 用户角色列表
//     *
//     * @return Result
//     */
//    @AutoLog
//    @GetMapping("/list")
//    @RequiresPermissions("sys:userrole:list")
//    @ShiroDesc("系统用户角色:列表")
//    public Result list() throws AlertException {
//        List<SysUserRole> usersRoles = sysUserRoleService.list(SysUtils.autoCnd(SysUserRole.class));
//
////        List<Map<SysUser, List<SysRole>>> users = new ArrayList<>();
//        List<String> userids = new ArrayList<>();
//        Map<SysUser, List<String>> userRoleMap = new HashMap<>();
//
//        // 获取用户权限列表中所有用户id
//        usersRoles.forEach(userRole->userids.add(userRole.getUserId()));
//
//
//
//        return Result.ok().data());
//    }


    /**
     * 为指定用户添加角色
     *
     * @param userRole 用户id和角色id
     * @return Result
     */
    @AutoLog
    @PostMapping
    @RequiresPermissions("sys:userrole:add")
    @ShiroDesc("系统用户角色:添加")
    public Result add(@Valid SysUserRole userRole) throws AlertException {


        SysUserRole sysUserRole = this.sysUserRoleService.addUserRole(userRole.getUserId(), userRole.getRoleId());
        if (sysUserRole == null) {
            throw new AlertException("用户角色添加失败");
        }
        return Result.ok("用户角色添加成功").data(sysUserRole);
    }

//    /**
//     * 获得指定 用户 拥有的角色列表。
//     *
//     * @param userId 用户id
//     * @return Result
//     */
//    @AutoLog
//    @GetMapping("/{id}")
//    @RequiresPermissions("sys:userrole:look")
//    @ShiroDesc("系统用户角色:查看")
//    public Result get(@Length(min = 1, max = 32, message = "用户id只能在1~32位之间")
//                      @PathVariable("id") String userId) throws AlertException {
//        List<SysRole> userRoles = sysUserRoleService.getUserRoles(userId);
//        return Result.ok().data(userRoles);
//    }


//    /**
//     * 更新用户角色
//     *
//     * @param userRole 需要更新的用户角色。
//     * @return Result
//     */
//    @AutoLog
//    @PutMapping
//    @RequiresPermissions("sys:userrole:save")
//    @ShiroDesc("系统用户角色:保存")
//    public Result update(@Valid SysUserRole userRole) throws AlertException {
//        boolean b = sysUserRoleService.updateById(userRole);
//        if (!b) {
//            throw new AlertException("用户角色更新失败");
//        }
//        return Result.ok("用户角色更新成功");
//    }

    /**
     * 删除用户角色
     *
     * @param roleId 待删除角色id
     * @param userId 待删除用户id
     * @return Result
     */
    @AutoLog
    @DeleteMapping("/{user_id}/{role_id}")
    @RequiresPermissions("sys:userrole:del")
    @ShiroDesc("系统用户角色:删除")
    public Result delete(@PathVariable("user_id")
                         @Length(min = 1, max = 32, message = "用户id只能在1~32位之间") String userId,
                         @PathVariable("role_id")
                         @Length(min = 1, max = 32, message = "角色id只能在1~32位之间") String roleId) throws AlertException {
        Boolean b = this.sysUserRoleService.delUserPermission(userId, roleId);
        if (!b) {
            throw new AlertException("用户角色删除失败");
        }
        return Result.ok("用户角色删除成功");
    }

}
